#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

#include <string.h>

#include <libgen.h>  // dirname,  basename 

int mycpy(const char *srcpath, const char *destpath){
    int fd1 = open(srcpath, O_RDONLY);
    if(fd1 < 2) return -1;

    int fd2 = open(destpath, O_CREAT|O_WRONLY, 0655);
    if(fd2 < 2) return -1;

    char buf[1024] = ""; 
    while(1){
        ssize_t len = read(fd1, buf, 1024);
        if(len > 0){
            write(fd2, buf, len); // 写入实际大小的数据
        }

        if(len < 1024) break; // 源文件中的数据全部读取完成
    }
    close(fd1);
    close(fd2);
}

int main(int argc, char const *argv[])
{
    if(argc < 3 ) return -1;

    // 1. 定义数组存储所有源文件名或路径
    char *srcfiles[10] ;
    char *destdir = NULL;  // 读取目标目录
    int srcIdx = 0;
    for(int i=1;i<argc; i++){
        if(strcmp("-T", argv[i]) == 0){
            if(destdir != NULL) return -1; // 命令行参数包含多个-T
            destdir = (char *)argv[i+1]; // 读取目录的位置
            i++;
            continue;
        }

        srcfiles[srcIdx++] = (char *)argv[i]; // 存储argv中字符串的位置
    }

    // 2. 检查上面的目标和多个源文件读取的结果
    printf("---dest dir %s---\n", destdir);
    for(int i=0;i<srcIdx; i++){
        printf("---%s\n", srcfiles[i]);
    }

    // 3. 实现复制所有文件源到目标目录中
    for(int i=0;i<srcIdx; i++){
        // 复制文件的目标文件路径：  dest_dir/srcfilename
        char destpath[128] = "";
        sprintf(destpath, "%s/%s",  destdir, basename(srcfiles[i]));

        // 调用自定义函数实现两个文件的复制
        mycpy(srcfiles[i], destpath);
    }

    
    return 0;
}

